package com.cnap.multiclouldmgmt.repository.master;

import com.cnap.multiclouldmgmt.model.k8sModels.K8sClusterModel;
import com.cnap.multiclouldmgmt.model.microSvc.assist.RegionModel;
import com.cnap.multiclouldmgmt.model.microSvc.assist.ZoneModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
/**
 * @author dyq
 * 对接数据库操作语句
 */
@Mapper
public interface K8sClusterInfoMapper {

    /**
     * 按ip获取集群信息
     * @param k8sClusterIp
     * @return
     */
    K8sClusterModel getK8sClusterInfoByIp(@Param("k8sClusterIp")String k8sClusterIp);

    /**
     * 按名称获取集群信息
     * @param k8sClusterName
     * @return
     */
    K8sClusterModel getK8sClusterInfoByName(@Param("k8sClusterName") String k8sClusterName);

    /**
     * 按名称获取集群信息
     * @param k8sClusterName
     * @return
     */
    List<K8sClusterModel> getK8sClusterInfoByNameAccount(@Param("k8sClusterName") String k8sClusterName,@Param("accountName") String accountName);

    /**
     * 保存集群信息
     * @param k8sClusterModel
     */
    void saveK8sClusterInfo(K8sClusterModel k8sClusterModel);

    /**
     * 按条件获取集群数量
     * @param cloudVendor
     * @param k8sClusterName
     * @param createUser
     * @return
     */
    int countK8sClusterByCloudVendorOrName(@Param("cloudVendor") String cloudVendor,
                                           @Param("k8sClusterName")  String k8sClusterName,
                                           @Param("createUser")  String createUser,
                                           @Param("accountName")  String accountName);

    /**
     * 分页获取集群信息
     * @param cloudVendor
     * @param k8sClusterName
     * @param pageSize
     * @param offset
     * @param createUser
     * @return
     */
    List<K8sClusterModel> getK8sClusterByCloudVendorOrNameByPage(@Param("cloudVendor") String cloudVendor, @Param("k8sClusterName") String k8sClusterName,
                                                                 @Param("pageSize") int pageSize,@Param("offset") int offset,
                                                                 @Param("createUser")  String createUser,
                                                                 @Param("accountName")  String accountName);

    /**
     * 更新集群数据
     * @param k8sClusterModel
     */
    void updateK8sClusterInfo(K8sClusterModel k8sClusterModel);

    /**
     * 按ip删除集群
     * @param k8sClusterIp
     */
    void delK8sClusterByIp(@Param("k8sClusterIp") String k8sClusterIp);

    /**
     * 创建表
     */
    void createK8sClusterInfoTableIfNotExist();

    /**
     * 去重获取用户所有的云商
     * @param creatUser
     * @return
     */
    List<String> getClouudVendorsByCreateUser(@Param("creatUser")String creatUser);

    /**
     * 获取用户所有的集群ip
     * @param creatUser
     * @return
     */
    List<String> getK8sIpsByUserName(@Param("creatUser")String creatUser);

    /**
     * 获取所有集群ip
     * @return
     */
    List<String> getAllIps();

    /**
     * 获取所有集群名称
     * @return
     */
    List<String> getAllNames();

    /**
     * 根据区域id返回一个k8s集群
     * @param zoneId
     * @return
     */
    K8sClusterModel getK8sClusterInfoByZone(@Param("zoneId")String zoneId);

    /**
     * 更新集群的资源信息
     * @param k8sClusterIp
     * @param vmInfoJson
     */
    void updateClusterVmInfo(@Param("k8sClusterIp")String k8sClusterIp,@Param("vmInfoJson")String vmInfoJson);

    /**
     * 根据云商获取
     * @param cloudVendor
     * @return
     */
    List<K8sClusterModel> getAllK8sClusterByClouderVendor(@Param("cloudVendor")String cloudVendor);

    /**
     * 根据区域id返回一个k8s集群
     * @param zoneId
     * @return
     */
    List<K8sClusterModel> getK8sClusterInfosByZone(@Param("zoneId")String zoneId);

    List<RegionModel> getAllUseRegion(@Param("cloudVendor")String cloudVendor, @Param("regionId")String regionId);

    List<ZoneModel> getAllUseZone(@Param("cloudVendor")String cloudVendor, @Param("regionId")String regionId
            , @Param("zoneId")String zoneId);

    K8sClusterModel getK8sClusterInfoLikeZone(@Param("zoneId")String zoneId);

    List<K8sClusterModel> getAllGpuClusterInfo();
}
